From a9364bc053c0cf1ccd892d775e60cc4d7de26b93 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Fri, 19 Jul 2019 09:47:16 +0200 Subject: [PATCH] Revert "file chooser: Stop using gtk_window_get_position" This reverts commit 2ed533c3e1f0fe776fb24cc370447a0c63e49f24. This also made the filechooser dialog not save the window size anymore, which does not depend on the gtk_window_get_position() removal. --- gtk/gtkfilechooserdialog.c | 32 ++++++++++++++++++++++++++++++++ gtk/gtkfilechooserprivate.h | 1 + gtk/gtkfilechooserwidget.c | 5 +++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c index 85a182f8a8..40e19c8a87 100644 --- a/gtk/gtkfilechooserdialog.c +++ b/gtk/gtkfilechooserdialog.c @@ -577,9 +577,39 @@ gtk_file_chooser_dialog_map (GtkWidget *widget) GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->map (widget); } +static void +save_dialog_geometry (GtkFileChooserDialog *dialog) +{ + GtkWindow *window; + GSettings *settings; + int old_x, old_y, old_width, old_height; + int x, y, width, height; + + settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (dialog)); + + window = GTK_WINDOW (dialog); + + gtk_window_get_position (window, &x, &y); + gtk_window_get_size (window, &width, &height); + + g_settings_get (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &old_x, &old_y); + if (old_x != x || old_y != y) + g_settings_set (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", x, y); + + g_settings_get (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &old_width, &old_height); + if (old_width != width || old_height != height) + g_settings_set (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", width, height); + + g_settings_apply (settings); +} + static void gtk_file_chooser_dialog_unmap (GtkWidget *widget) { + GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (widget); + + save_dialog_geometry (dialog); + GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->unmap (widget); } @@ -593,6 +623,8 @@ gtk_file_chooser_dialog_size_allocate (GtkWidget *widget, width, height, baseline); + if (gtk_widget_is_drawable (widget)) + save_dialog_geometry (GTK_FILE_CHOOSER_DIALOG (widget)); } /* We do a signal connection here rather than overriding the method in diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h index 6379e0ab60..a0a622c111 100644 --- a/gtk/gtkfilechooserprivate.h +++ b/gtk/gtkfilechooserprivate.h @@ -41,6 +41,7 @@ G_BEGIN_DECLS #define SETTINGS_KEY_SHOW_TYPE_COLUMN "show-type-column" #define SETTINGS_KEY_SORT_COLUMN "sort-column" #define SETTINGS_KEY_SORT_ORDER "sort-order" +#define SETTINGS_KEY_WINDOW_POSITION "window-position" #define SETTINGS_KEY_WINDOW_SIZE "window-size" #define SETTINGS_KEY_SIDEBAR_WIDTH "sidebar-width" #define SETTINGS_KEY_STARTUP_MODE "startup-mode" diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 0a37e2834d..59fb176040 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -6177,14 +6177,15 @@ gtk_file_chooser_widget_get_default_size (GtkFileChooserEmbed *chooser_embed, GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser_embed); GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); GtkRequisition req; - int width, height; + int x, y, width, height; GSettings *settings; settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl)); + g_settings_get (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &x, &y); g_settings_get (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &width, &height); - if (width > 0 && height > 0) + if (x >= 0 && y >= 0 && width > 0 && height > 0) { *default_width = width; *default_height = height; -- 2.30.2